const db = require('../config/db');
const jwt = require('jsonwebtoken');

/**
 * 验证用户是否已登录的中间件
 * 用于保护需要登录才能访问的路由
 */
module.exports = async (req, res, next) => {
  try {
    // 从请求头获取token
    const token = req.header('Authorization')?.replace('Bearer ', '');
    if (!token) {
      console.log('未提供token');
      return res.status(401).json({ message: '请先登录' });
    }
    const decoded = jwt.verify(token, process.env.JWT_SECRET || 'your_jwt_secret');
    // 查找用户并验证在线状态
    const [users] = await db.query(
      'SELECT * FROM users WHERE user_id = ? AND login = 1',
      [decoded.id]
    );
    if (users.length === 0) {
      console.log(`[${new Date().toLocaleString()}] [WARN] 登录状态已失效: 用户ID=${decoded.id}`);
      return res.status(401).json({ message: '登录状态已失效，请重新登录' });
    }
    // 将用户信息添加到请求对象，并补充role字段（优先数据库，若无则用token）
    req.user = {
      id: users[0].user_id,
      ...users[0],
      role: users[0].role !== undefined ? users[0].role : decoded.role
    };
    next();
  } catch (error) {
    // 记录错误日志
    console.log(`[${new Date().toLocaleString()}] [ERROR] 身份验证失败: ${error.message}`);
    console.error('身份验证错误:', error);
    res.status(401).json({ message: '身份验证失败' });
  }
};